#ifndef __ALU_MUL_H__
#define __ALU_MUL_H__

#include "LRF.h"
#include <queue>

using namespace std;

//ALU MUL

typedef struct ALU_MUL_ENTRY{
	int inputA;
	int inputB;
	float inputFA;
	float inputFB;
	int OpCode;
	int regDst;
	int CyclesLeft;
	bool Ready;
	int outputZ;
	float outputFZ;
} ALU_MUL_ENTRY;

class ALU_MUL
{

public:
	ALU_MUL();
	int  inputA;
	float inputFA;
	int  inputB;
	float inputFB;
	int  OpCode;
	int regDst;
	LRF * fu_lrf;
	void update();
	int  getOutput();
	float getOutputF();
	bool isReady();
	bool isFinished();

private:
	int CyclesLeft;
	bool Ready;
	int outputZ;
	float outputFZ;
	queue<ALU_MUL_ENTRY> mul_pipeline;
	void update_queue();
};

#endif
